React Fiber
Reactの処理単位
Reactのv16以降のreconciliationのためのアルゴリズムのためのもの
Fiber単位に優先度を振り、優先度が高いものを更新する
ReactElement毎に、更新処理をリストにする
更新処理のスタックフレームのように扱われる
コンポーネント同士を連結している
Fiberはタスクの最小単位
この単位ごとにSchedulerが処理を行う
Fiberを最小単位とすることで以下のようなことが実現できる
処理の休止と、後にそこへ戻ること
処理の優先順位割り振り
以前に完了した処理の再利用
不要な処理の強制終了
Fiberが含んでいる内容
React Fiberの型
React Fiber誕生の経緯
従来(v15以前)は差分検出のためのアルゴリズムとして、Virtual DOMを上から再帰的に比較する方法を取っていた
このアルゴリズムのことを「React Stack」と呼んでいた ref
このアルゴリズムだと、「更新する」と決まったものを全て更新するまで、他の処理をブロックしてた
つまりその間アプリケーションがフリーズする
要は全ての差分を同等に扱っていたが、実際のUIではそうでもないことも多い
つまり、差分を即座に反映する必要がない箇所もある
ex. フォーム入力の描画は優先度が高い
ex. アニメーションとstore更新なら後者の方が先に完了する必要がある
ということで、どれを優先的に更新するかを決めることにした
ここにFiberを用いる
「ReactElementのリスト」を使うことで、更新処理を独立に行う
独立に行うことで途中で処理を休止したり、その後そこから再開したりができる
差分は検出したが実際に使われるまでは更新しない遅延評価が行われるということかmrsekut.icon
#??
優先度の割り振りはどういう規則に則って行われている?
つまりどういう処理は優先度が高い?
2023/8/14 React Fiberの再実装
参考
React Fiberアーキテクチャについて | POSTD
Fiber型の詳細など
React Fiber現状確認 - blog.koba04.com
FIber以前のアルゴリズムの問題点などが詳しい
Fiberのスケジューリングなどについても詳しい
あまりちゃんと読んでないmrsekut.icon
ReactはなぜFiberで書き直されたのか?Reactの課題と将来像を探る | HTML5Experts.jp
#WIP
https://github.com/acdlite/react-fiber-architecture
解説
https://github.com/facebook/react/issues/7942?source=post_page---------------------------#issue-182373497
https://ja.reactjs.org/docs/codebase-overview.html#fiber-reconciler
https://overreacted.io/ja/how-are-function-components-different-from-classes/
https://blog.ag-grid.com/inside-fiber-an-in-depth-overview-of-the-new-reconciliation-algorithm-in-react/
https://speakerdeck.com/koba04/make-it-declarative-with-react?slide=26
JSConfJP2019 day1#5de48b0c1982700000c9161c
https://ja.reactjs.org/docs/faq-internals.html
https://github.com/react-spring/react-three-fiber
https://blog.logrocket.com/deep-dive-into-react-fiber-internals/
https://medium.com/react-in-depth/inside-fiber-in-depth-overview-of-the-new-reconciliation-algorithm-in-react-e1c04700ef6e
https://zenn.dev/noyan/articles/5c2d2d6089a9ff
React v18
Blocking Rendering
/noyan/Reactの全体のアーキテクチャ